package main

import (
	"fmt"
)

//给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
//有效字符串需满足：
//左括号必须用相同类型的右括号闭合。
//左括号必须以正确的顺序闭合。
//每个右括号都有一个对应的相同类型的左括号。

// 官方题解（暂时没搞懂）
func isValid(s string) bool {
	if len(s)/2 != 0 {
		return false
	}

	hash := map[byte]byte{')': '(', ']': '[', '}': '{'}

	stack := make([]byte, 0)

	if s == "" {
		return true
	}

	for i := 0; i < len(s); i++ {
		if s[i] == '(' || s[i] == '[' || s[i] == '{' {
			stack = append(stack, s[i])
		} else if len(stack) > 0 && stack[len(stack)-1] == hash[s[i]] {
			stack = stack[:len(stack)-1]
		} else {
			return false
		}
	}

}

func main() {
	s := "()[]{}"
	fmt.Println(isValid(s))
}
